<?php
 /*
  * @Descripttion: AES
  * @version: v1
  * @Author: Terry
  * @Date: 2021-02-19 18:07:16
 * @LastEditors: Terry
 * @LastEditTime: 2021-10-05 11:35:39
  */
namespace libs;
class AES{
     /**
      * var string $method 加解密方法，可通过openssl_get_cipher_methods()获得
      */
     protected $method;
  
     /**
      * var string $secret_key 加解密的密钥
      */
     protected $secret_key;
  
     /**
      * var string $iv 加解密的向量，有些方法需要设置比如CBC
      */
     protected $iv;
  
     /**
      * var string $options （不知道怎么解释，目前设置为0没什么问题）
      */
     protected $options;
  
     /**
      * 构造函数
      *
      * @param string $key 密钥
      * @param string $method 加密方式
      * @param string $iv iv向量
      * @param mixed $options 还不是很清楚
      *
      */
     public function __construct($key, $method = 'AES-128-CBC', $iv = '', $options = 0)
     {
         // key是必须要设置的
         $this->secret_key = isset($key) ? $key : exit('key为必须项');
  
         $this->method = $method;
  
         $this->iv = $iv;
  
         $this->options = $options;
     }
  
     /**
      * 加密方法，对数据进行加密，返回加密后的数据
      *
      * @param string $data 要加密的数据
      *
      * @return string
      *
      */
     public function encrypt($data)
     {
         $en = openssl_encrypt($data, $this->method, $this->secret_key, $this->options, $this->iv);
         //$en = $this->String2Hex($en);
         return $en;
     }
  
     /**
      * 解密方法，对数据进行解密，返回解密后的数据
      *
      * @param string $data 要解密的数据
      *
      * @return string
      *
      */
     public function decrypt($data)
     {
         //$data = $this->Hex2String($data);
         $de = openssl_decrypt($data, $this->method, $this->secret_key, $this->options, $this->iv);
         return $de;
     }
  
  
     public function String2Hex($string){
  
  
         $hex='';
 //        for ($i=0; $i < strlen($string); $i++){
 //            $hex .= dechex(ord($string[$i]));
 //        }
         $hex = bin2hex($string);
         return $hex;
     }
  
     public function Hex2String($hex){
         $string='';
         for ($i=0; $i < strlen($hex)-1; $i+=2){
             $string .= chr(hexdec($hex[$i].$hex[$i+1]));
         }
         return $string;
     }
 }
 
